# Darren
# 2025年02月18日15时51分43秒
# 字典 多个键值对构成，类似于C语言中的结构体 无序容器
# 内部实现：Hash
lihua = {"name": "lihua",
         'age': 18, 'sex': True,
         'height': 1.80}  # {str1:str2,...} str1:关键字/键 str2:值

# 遍历
for key in lihua.keys():  # .keys()可省
    print("%s %s" % (key, lihua[key]))
print('*' * 50)
for k, v in lihua.items():  # .items() 所有(key,value)元组列表
    print(k, v)
print('*' * 50)
for value in lihua.values():  # 所有vlue列表
    print(value)
print('*' * 50)

# 增加，修改  dict()[key]=value,dict.setdefault(key,value)
lihua["name"] = "wangfeng"  # 若key存在，修改数据
print(lihua["name"])
lihua["grade"] = 7  # 若key不存在，则新建键值对
print(lihua)
lihua.setdefault("height", 800)  # 若key存在，不会修改数据
print(lihua)
lihua.setdefault("stuNo", '012345')  # 若key不存在，则新建键值对
print(lihua)

# 合并
xuexiao = {"xuexiao": "shanghai"}
lihua.update(xuexiao)  # dict1.update(dict2) 将字典2的内容合并到字典1
print(lihua)

# 删除
del xuexiao["xuexiao"]  # 删除指定键值对
print(xuexiao)
lihua.pop("sex")
print(lihua)
# del xuexiao["p"]  # 键值对不存在会报错 KeyError
# lihua.pop("p")  # 键值对不存在会报错 KeyError

# 清空
xuexiao = {"xuexiao": "shanghai", "Review": "Good"}
print(f"清空前：{xuexiao}")
xuexiao.clear()
print(f"清空后：{xuexiao}")

# 取值
# print(xuexiao["112"])  # 不存在会报错 KeyError
print(xuexiao.get("112"))  # dict.get(key) 不存在不报错

# 列表嵌套字典
card_list = [{"name": "张三",
              "qq": "12345",
              "phone": "110"},
             {"name": "李四",
              "qq": "54321",
              "phone": "10086"}]
for d in card_list:  # 遍历输出
    for k, v in d.items():
        print(k, v)